home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 24 / Amiga Format AFCD24 (Feb 1998, Issue 108).iso / -in_the_mag- / emulation / amiga / uae-0.7.0b2 / src / xdebug.c < prev    next >
C/C++ Source or Header  |  1998-01-20  |  55KB  |  1,590 lines

  1.  /*
  2.   * UAE - The Un*x Amiga Emulator
  3.   *
  4.   * XGUI and XDebugger
  5.   *
  6.   * Copyright 1996 Christian Schmitt <schmittc@uni-freiburg.de>
  7.   */
  8.  
  9. #include "sysconfig.h"
  10. #include "sysdeps.h"
  11.  
  12. #include <ctype.h>
  13. #include <signal.h>
  14.  
  15. #if FORMS_H_VARIANT == 0
  16. #include <forms.h>
  17. #else
  18. #include <X11/forms.h>
  19. #endif
  20.  
  21. #include "config.h"
  22. #include "options.h"
  23. #include "threaddep/penguin.h"
  24. #include "uae.h"
  25. #include "memory.h"
  26. #include "custom.h"
  27. #include "readcpu.h"
  28. #include "machdep/m68k.h"
  29. #include "newcpu.h"
  30. #include "debug.h"
  31. #include "cia.h"
  32. #include "disk.h"
  33. #include "xwin.h"
  34. #include "gui.h"
  35.  
  36. int debugger_active = 0;
  37. static uaecptr skipaddr;
  38. static int do_skip;
  39. int debugging = 0;
  40. static char exit_debug;
  41.  
  42. static char custom = 0, fpu = 0, memory = 0, disasm = 0;
  43. static uae_s32 xgui_debug_adress,xgui_memory_adress,xgui_disasm_adress;
  44.  
  45. /* First the Forms stuff */
  46.  
  47. FL_FORM *Control;
  48.  
  49. FL_OBJECT
  50.     *udf0,
  51.     *I_df3,
  52.     *DF0,
  53.     *Reset,
  54.     *Debug,
  55.     *Exit,
  56.     *Power,
  57.     *Text_1,
  58.     *Text_2,
  59.     *E_df0,
  60.     *I_df0,
  61.     *E_df1,
  62.     *I_df1,
  63.     *E_df2,
  64.     *I_df2,
  65.     *E_df3,
  66.     *Led_0,
  67.     *DF1,
  68.     *DF2,
  69.     *DF3,
  70.     *l_power,
  71.     *l_df0,
  72.     *l_df1,
  73.     *l_df2,
  74.     *l_df3;
  75.  
  76. FL_FORM *Debugger;
  77.  
  78. FL_OBJECT
  79.     *a0,
  80.     *a1,
  81.     *a2,
  82.     *a3,
  83.     *a4,
  84.     *a5,
  85.     *a6,
  86.     *a7,
  87.     *d0,
  88.     *d1,
  89.     *d2,
  90.     *d3,
  91.     *d4,
  92.     *d5,
  93.     *d6,
  94.     *d7,
  95.     *usp,
  96.     *isp,
  97.     *msp,
  98.     *vbr,
  99.     *pc,
  100.     *adress,
  101.     *imask,
  102.     *Output,
  103.     *f_s,
  104.     *f_m,
  105.     *f_x,
  106.     *f_n,
  107.     *f_z,
  108.     *f_v,
  109.     *f_c,
  110.     *f_t;
  111.  
  112. FL_FORM *Custom;
  113.  
  114. FL_OBJECT
  115.     *a_cra,
  116.     *a_crb,
  117.     *a_imask,
  118.     *a_tod,
  119.     *a_ta,
  120.     *a_tb,
  121.     *b_cra,
  122.     *b_crb,
  123.     *b_imask,
  124.     *b_tod,
  125.     *b_ta,
  126.     *b_tb,
  127.     *uae_dmacon,
  128.     *uae_intena,
  129.     *uae_intreq,
  130.     *uae_vpos,
  131.     *uae_hpos,
  132.     *uae_frames;
  133.  
  134. FL_FORM *FPU;
  135.  
  136. FL_OBJECT
  137.     *fpu0,
  138.     *fpu1,
  139.     *fpu2,
  140.     *fpu3,
  141.     *fpu4,
  142.     *fpu5,
  143.     *fpu6,
  144.     *fpu7,
  145.     *fpu_n,
  146.     *fpu_z,
  147.     *fpu_i,
  148.     *fpu_nan;
  149.  
  150. FL_FORM *Memory;
  151.  
  152. FL_OBJECT
  153.     *uaectrl_down,
  154.     *memory_field,
  155.     *uaectrl_up,
  156.     *memory_start;
  157.  
  158. FL_FORM *Disasm;
  159.  
  160. FL_OBJECT
  161.     *disasm_field,
  162.     *disasm_start,
  163.     *disasm_down,
  164.     *disasm_up;
  165.  
  166. static uaecptr nextpc;
  167.  
  168. static char* ccnames[] =
  169. { "T ","F ","HI","LS","CC","CS","NE","EQ",
  170.   "VC","VS","PL","MI","GE","LT","GT","LE" };
  171.  
  172. static void uaectrl_disasm(uaecptr addr, uaecptr *nextpc, int cnt,char *buffer)
  173. {
  174.     uaecptr pc = m68k_getpc();
  175.     uaecptr newpc = 0;
  176.     int i,j,oldcnt=cnt;
  177.     char dummy[120];
  178.     char buf[120];
  179.     m68k_setpc(addr);
  180.     for (;cnt--;){
  181.     char instrname[20],*ccpt;
  182.     int opwords;
  183.     uae_u32 opcode;
  184.     struct mnemolookup *lookup;
  185.     struct instr *dp;
  186.  
  187.     sprintf(buf,"%08lx: ", (unsigned long int)m68k_getpc());
  188.     if (oldcnt == 1) {
  189.         for(opwords = 0; opwords < 5; opwords++) {
  190.         sprintf(dummy, "%04x ", (unsigned int)(get_word(m68k_getpc()+opwords*2)));
  191.         strcat(buf, dummy);
  192.         }
  193.     }
  194.  
  195.     opcode = nextiword();
  196.     if (cpufunctbl[opcode] == op_illg) {
  197.         opcode = 0x4AFC;
  198.     }
  199.     dp = table68k + opcode;
  200.     for (lookup = lookuptab;lookup->mnemo != dp->mnemo; lookup++)
  201.         ;
  202.     strcpy(instrname,lookup->name);
  203.     ccpt = strstr(instrname,"cc");
  204.     if (ccpt != 0) {
  205.         strncpy(ccpt,ccnames[dp->cc], 2);
  206.     }
  207.     strcat(buf, instrname);
  208.  
  209.     switch(dp->size){
  210.      case sz_byte: strcat(buf,".B "); break;
  211.      case sz_word: strcat(buf,".W "); break;
  212.      case sz_long: strcat(buf,".L "); break;
  213.      default: strcat(buf,"   ");break;
  214.     }
  215.  
  216.     if (dp->suse) {
  217.         newpc = m68k_getpc() + ShowEA(dp->sreg, dp->smode, dp->size, buf);
  218.     }
  219.     if (dp->suse && dp->duse)
  220.         strcat(buf,",");
  221.     if (dp->duse) {
  222.         newpc = m68k_getpc() + ShowEA(dp->dreg, dp->dmode, dp->size, buf);
  223.     }
  224.     if (ccpt != 0) {
  225.         if (cctrue(dp->cc))
  226.         sprintf(dummy, " == %08lx (TRUE)", (unsigned long int)newpc);
  227.         else
  228.         sprintf(dummy, " == %08lx (FALSE)", (unsigned long int)newpc);
  229.         strcat(buf, dummy);
  230.     } else if ((opcode & 0xff00) == 0x6100) { /* BSR */
  231.         sprintf(dummy, " == %08lx", (unsigned long int)newpc);
  232.         strcat(buf, dummy);
  233.     }
  234.     strcat(buffer,buf);
  235.     if(oldcnt > 1) {
  236.         strcat(buffer, "\n");
  237.     }
  238.     }
  239.     if (nextpc)
  240.     *nextpc = m68k_getpc();
  241.     m68k_setpc(pc);
  242. }
  243.  
  244. /* callbacks for form Control */
  245. static void ctrl_insert(FL_OBJECT *ob, long data)
  246. {
  247.     /* fill-in code for callback */
  248.     const char *buf;
  249.     char buffer[256],path[PATH_MAX+2];
  250.     int i=0,j,len;
  251. #ifdef HAVE_GETCWD
  252.     getcwd(path, PATH_MAX);
  253. #else
  254.     getwd(path);
  255. #endif
  256.     buf=fl_show_fselector("Disk-Image",path,"*.adf*","");
  257.     if(buf!=0) {
  258.     len=strlen(buf);
  259.     if(len!=0){
  260.         for(i = len; i > 0 && buf[i] != '/'; i--)
  261.         ;
  262.         for(j = 0; j <= i; j++)
  263.         path[j]=buf[j];
  264.         path[j]=0;
  265.         chdir(path);
  266.         for(i = 0, j = 0; buf[i] != 0; i++)
  267.         if(buf[i] == '/')
  268.             j=i;
  269.         j++;
  270.         for(i = j; buf[i] != 0; i++)
  271.         buffer[i-j] = buf[i];
  272.         buffer[i-j]=0;
  273.     } else {
  274.         buffer[0]=0;
  275.     }
  276.  
  277.     if(ob==I_df0) {
  278.         fl_set_object_label(DF0,buffer);
  279.         fl_redraw_object(DF0);
  280.         if (disk_empty(0)) disk_insert(0,buf);
  281.     }
  282.     if(ob==I_df1) {
  283.         fl_set_object_label(DF1,buffer);
  284.         fl_redraw_object(DF1);
  285.         if (disk_empty(1)) disk_insert(1,buf);
  286.     }
  287.     if(ob==I_df2) {
  288.         fl_set_object_label(DF2,buffer);
  289.         fl_redraw_object(DF2);
  290.         if (disk_empty(2)) disk_insert(2,buf);
  291.     }
  292.     if(ob==I_df3) {
  293.         fl_set_object_label(DF3,buffer);
  294.         fl_redraw_object(DF3);
  295.         if (disk_empty(3)) disk_insert(3,buf);
  296.     }
  297.     }
  298. }
  299.  
  300. static void ctrl_reset(FL_OBJECT *ob, long data)
  301. {
  302.     uae_reset ();
  303. }
  304.  
  305. static void ctrl_debug(FL_OBJECT *ob, long data)
  306. {
  307.     fl_hide_form(Control);
  308.     fl_show_form(Debugger,FL_PLACE_CENTER,FL_FULLBORDER,"UAE - Debuger");
  309.     fl_deactivate_object(f_s);
  310.     fl_deactivate_object(f_m);
  311.     fl_deactivate_object(f_x);
  312.     fl_deactivate_object(f_n);
  313.     fl_deactivate_object(f_z);
  314.     fl_deactivate_object(f_v);
  315.     fl_deactivate_object(f_c);
  316.     fl_deactivate_object(f_t);
  317.     fpu = 0;
  318.     custom = 0;
  319.     activate_debugger ();
  320. }
  321.  
  322. static void ctrl_exit(FL_OBJECT *ob, long data)
  323. {
  324.     if (fl_show_question("Do you really want to quit ??","","")!=0)
  325.     uae_quit ();
  326. }
  327.  
  328. static void ctrl_eject(FL_OBJECT *ob, long data)
  329. {
  330.     if(ob==E_df0) {
  331.     fl_set_object_label(DF0,"");
  332.     fl_redraw_object(DF0);
  333.     disk_eject(0);
  334.     }
  335.     if(ob==E_df1) {
  336.     fl_set_object_label(DF1,"");
  337.     fl_redraw_object(DF1);
  338.     disk_eject(1);
  339.     }
  340.     if(ob==E_df2) {
  341.     fl_set_object_label(DF2,"");
  342.     fl_redraw_object(DF2);
  343.     disk_eject(2);
  344.     }
  345.     if(ob==E_df3) {
  346.     fl_set_object_label(DF3,"");
  347.     fl_redraw_object(DF3);
  348.     disk_eject(3);
  349.     }
  350. }
  351.  
  352. /* callbacks for form Debugger */
  353. static void ctrl_custom(FL_OBJECT *ob, long data)
  354. {
  355.     if (custom) {
  356.     fl_hide_form(Custom);
  357.     custom = 0;
  358.     } else {
  359.     fl_show_form(Custom,FL_PLACE_CENTER,FL_FULLBORDER,"Custom");
  360.     custom = 1;
  361.     }
  362. }
  363.  
  364. static void ctrl_fpu(FL_OBJECT *ob, long data)
  365. {
  366.     /* fill-in code for callback */
  367.     if (fpu) {
  368.     fl_hide_form(FPU);
  369.     fpu = 0;
  370.     } else {
  371.     fl_show_form(FPU,FL_PLACE_CENTER,FL_FULLBORDER,"FPU");
  372.     fl_deactivate_object(fpu_n);
  373.     fl_deactivate_object(fpu_z);
  374.     fl_deactivate_object(fpu_i);
  375.     fl_deactivate_object(fpu_nan);
  376.     fpu = 1;
  377.     }
  378. }
  379.  
  380. static void x_step(void)
  381. {
  382.     skipaddr = nextpc;
  383.     do_skip = 1;
  384.     regs.spcflags |= SPCFLAG_BRK;
  385. }
  386.  
  387. static void xgui_go(void)
  388. {
  389.     m68k_setpc (xgui_debug_adress);
  390.     debugger_active = 0;
  391.     debugging = 0;
  392.     fl_activate_object(f_x);
  393.     fl_trigger_object(f_x);
  394.     fl_deactivate_object(f_x);
  395.     exit_debug=1;
  396. }
  397.  
  398. static void xgui_forward(void)
  399. {
  400.     skipaddr = xgui_debug_adress;
  401.     do_skip = 1;
  402.     regs.spcflags |= SPCFLAG_BRK;
  403.     fl_activate_object(f_x);
  404.     fl_trigger_object(f_x);
  405.     fl_deactivate_object(f_x);
  406.     exit_debug=1;
  407. }
  408.  
  409. static void xgui_memupdate(void)
  410. {
  411.     int lines=17;
  412.     char buffer[2048];
  413.     char buf[10],ascii[9];
  414.     uae_s32 addr=xgui_memory_adress;
  415.     buffer[0] = 0;
  416.  
  417.     for (; lines--;){
  418.     int i;
  419.  
  420.     sprintf(buf, "%08lx: ", addr);
  421.     strcat(buffer, buf);
  422.     for(i = 0; i< 8; i++) {
  423.         uae_u8 j = get_byte(addr);
  424.         if(isprint(j))
  425.         ascii[i]=j;
  426.         else
  427.         ascii[i]='.';
  428.         sprintf(buf,"%02x ",j);
  429.         strcat(buffer, buf);
  430.         addr += 1;
  431.     }
  432.     ascii[8] = 0;
  433.     strcat(buffer,ascii);
  434.     sprintf(buf,"\n");
  435.     strcat(buffer,buf);
  436.     }
  437.     fl_set_object_label(memory_field, buffer);
  438.     sprintf(buf, "0x%08lx", xgui_memory_adress);
  439.     fl_set_input(memory_start, buf);
  440. }
  441.  
  442. static void xgui_disasmupdate(void)
  443. {
  444.     char buffer[4048];
  445.     char buf[100];
  446.     int lines=17;
  447.     uae_s32 dummy=xgui_disasm_adress;
  448.     buffer[0]=0;
  449.     uaectrl_disasm(dummy,NULL,17,buffer);
  450.     fl_set_object_label(disasm_field,buffer);
  451.     sprintf(buf,"0x%08lx",xgui_disasm_adress);
  452.     fl_set_input(disasm_start,buf);
  453. #if 0
  454.     for(;;)
  455.     ;
  456. #endif
  457. }
  458.  
  459.  
  460. static void ctrl_mem(FL_OBJECT *ob, long data)
  461. {
  462.     if(!memory) {
  463.     fl_show_form(Memory,FL_PLACE_CENTER,FL_FULLBORDER,"Memory Browser");
  464.     memory=1;
  465.     xgui_memory_adress=xgui_debug_adress;
  466.     xgui_memupdate();
  467.     } else {
  468.     fl_hide_form(Memory);
  469.     memory=0;
  470.     }
  471. }
  472.  
  473. static void ctrl_disasm(FL_OBJECT *ob, long data)
  474. {
  475.   /* the xgui_disasmupdate() function segfaults; therefore this function
  476.      is disabled */
  477. #if 1
  478.     if(!disasm) {
  479.     fl_show_form(Disasm,FL_PLACE_CENTER,FL_FULLBORDER,"Disassembler");
  480.     disasm = 1;
  481.     xgui_disasm_adress=xgui_debug_adress;
  482.     xgui_disasmupdate();
  483.     } else {
  484.     fl_hide_form(Disasm);
  485.     disasm=0;
  486.     }
  487. #else
  488.     fl_show_alert("Sorry","This function isn't available yet",NULL,0);
  489. #endif
  490. }
  491.  
  492. static void ctrl_debug_exit(FL_OBJECT *ob, long data)
  493. {
  494.   fl_hide_form(Debugger);
  495.   if(fpu) fl_hide_form(FPU);
  496.   if(custom) fl_hide_form(Custom);
  497.   if(memory) fl_hide_form(Memory);
  498.   if(disasm) fl_hide_form(Disasm);
  499.  
  500.   fpu = custom = memory = disasm = 0;
  501.   fl_show_form(Control,FL_PLACE_CENTER,FL_FULLBORDER,"UAE - Control");
  502.   fl_activate_object(f_x);
  503.   fl_trigger_object(f_x);
  504.   fl_deactivate_object(f_x);
  505.   debugger_active = 0;
  506.   debugging = 0;
  507.   exit_debug=1;
  508. }
  509.  
  510. static void ctrl_step(FL_OBJECT *ob, long data)
  511. {
  512.     /* fill-in code for callback */
  513.     regs.spcflags |= SPCFLAG_BRK;
  514.     debugging=1;
  515.     exit_debug=0;
  516.     fl_activate_object(f_s);
  517.     fl_trigger_object(f_s);
  518.     fl_deactivate_object(f_s);
  519. }
  520.  
  521. static void ctrl_next(FL_OBJECT *ob, long data)
  522. {
  523.     /* fill-in code for callback */
  524.     x_step();
  525.     debugging=1;
  526.     exit_debug=0;
  527.     fl_activate_object(f_s);
  528.     fl_trigger_object(f_s);
  529.     fl_deactivate_object(f_s);
  530. }
  531.  
  532. static void ctrl_go(FL_OBJECT *ob, long data)
  533. {
  534.     /* fill-in code for callback */
  535.     xgui_go();
  536.     ctrl_debug_exit(NULL,0);
  537. }
  538.  
  539. static void ctrl_forward(FL_OBJECT *ob, long data)
  540. {
  541.     /* fill-in code for callback */
  542.     xgui_forward();
  543. }
  544.  
  545. static void ctrl_address(FL_OBJECT *ob, long data)
  546. {
  547.     /* fill-in code for callback */
  548.     xgui_debug_adress=strtol(fl_get_input(adress),NULL,0);
  549. }
  550.  
  551.  
  552. /* callbacks for form Memory */
  553. static void change_memory_start(FL_OBJECT *ob, long data)
  554. {
  555.     if(ob==uaectrl_up) xgui_memory_adress-=8;
  556.     else if(ob==uaectrl_down) xgui_memory_adress+=8;
  557.     else xgui_memory_adress=strtol(fl_get_input(ob),NULL,16);
  558.     xgui_memupdate();
  559. }
  560.  
  561.  
  562.  
  563. /* callbacks for form Disasm */
  564. static void change_disasm_start(FL_OBJECT *ob, long data)
  565. {
  566.     if(ob==disasm_up) xgui_disasm_adress-=2;
  567.     else if(ob==disasm_down) xgui_disasm_adress+=2;
  568.     else xgui_disasm_adress=strtol(fl_get_input(ob),NULL,0);
  569.     xgui_disasmupdate();
  570. }
  571.  
  572.  
  573.  
  574. void activate_debugger(void)
  575. {
  576.     do_skip = 0;
  577.     if (debugger_active)
  578.     return;
  579.     debugger_active = 1;
  580.     regs.spcflags |= SPCFLAG_BRK;
  581.     debugging = 1;
  582.     use_debugger = 1;
  583. }
  584.  
  585. static int firsthist = 0;
  586. static int lasthist = 0;
  587. #ifdef NEED_TO_DEBUG_BADLY
  588.  
  589. static struct regstruct history[MAX_HIST];
  590. static union flagu historyf[MAX_HIST];
  591. #else
  592. static uaecptr history[MAX_HIST];
  593. #endif
  594.  
  595. static void uaectrl_update(void);
  596.  
  597. /* external variables/functions from cia.c */
  598.  
  599. void x_dumpcustom(void)
  600. {
  601.     char buf[20];
  602.     sprintf(buf,"%x",(unsigned int)DMACONR());
  603.     fl_set_object_label(uae_dmacon,buf);
  604.     sprintf(buf,"%x",(unsigned int)intena);
  605.     fl_set_object_label(uae_intena,buf);
  606.     sprintf(buf,"%x",(unsigned int)intreq);
  607.     fl_set_object_label(uae_intreq,buf);
  608.     sprintf(buf,"%x",(unsigned int)vpos);
  609.     fl_set_object_label(uae_vpos,buf);
  610.     sprintf(buf,"%x",(unsigned int)current_hpos());
  611.     fl_set_object_label(uae_hpos,buf);
  612.     if(timeframes)
  613.     sprintf(buf,"%d",frametime/timeframes);
  614.     else
  615.     buf[0]=0;
  616.     fl_set_object_label(uae_frames,buf);
  617. }
  618.  
  619. void x_dumpcia(void)
  620. {
  621.     char buf[20];
  622.     sprintf(buf,"%02x",(unsigned int)ciaacra);
  623.     fl_set_object_label(a_cra,buf);
  624.     sprintf(buf,"%02x",(unsigned int)ciaacrb);
  625.     fl_set_object_label(a_crb,buf);
  626.     sprintf(buf,"%02x",(unsigned int)ciaaimask);
  627.     fl_set_object_label(a_imask,buf);
  628.     sprintf(buf,"%08lx %7s",(unsigned int)ciaatod,ciaatlatch ? " latched" : "");
  629.     fl_set_object_label(a_tod,buf);
  630.     sprintf(buf,"%04lx",(unsigned long int)ciaata);
  631.     fl_set_object_label(a_ta,buf);
  632.     sprintf(buf,"%04lx",(unsigned long int)ciaatb);
  633.     fl_set_object_label(a_tb,buf);
  634.     sprintf(buf,"%02x",(unsigned int)ciabcra);
  635.     fl_set_object_label(b_cra,buf);
  636.     sprintf(buf,"%02x",(unsigned int)ciabcrb);
  637.     fl_set_object_label(b_crb,buf);
  638.     sprintf(buf,"%02x",(unsigned int)ciabimask);
  639.     fl_set_object_label(b_imask,buf);
  640.     sprintf(buf,"%08lx %s",(unsigned long int)ciabtod,ciabtlatch ? " latched" : "");
  641.     fl_set_object_label(b_tod,buf);
  642.     sprintf(buf,"%04x",(unsigned int)ciabta);
  643.     fl_set_object_label(b_ta,buf);
  644.     sprintf(buf,"%04x",(unsigned int)ciabtb);
  645.     fl_set_object_label(b_tb,buf);
  646.  
  647. }
  648.  
  649. void uaectrl_update(void)
  650. {
  651.     char buf[120];
  652.     fl_freeze_form(Debugger);
  653.     xgui_debug_adress=m68k_getpc();
  654.     sprintf(buf,"0x%08lx", (unsigned long int)xgui_debug_adress);
  655.     fl_set_input(adress,buf);
  656.     sprintf(buf,"%08lx", (unsigned long int)m68k_areg(regs,0));
  657.     fl_set_object_label(a0,buf);
  658.     sprintf(buf,"%08lx", (unsigned long int)m68k_areg(regs,1));
  659.     fl_set_object_label(a1,buf);
  660.     sprintf(buf,"%08lx", (unsigned long int)m68k_areg(regs,2));
  661.     fl_set_object_label(a2,buf);
  662.     sprintf(buf,"%08lx", (unsigned long int)m68k_areg(regs,3));
  663.     fl_set_object_label(a3,buf);
  664.     sprintf(buf,"%08lx", (unsigned long int)m68k_areg(regs,4));
  665.     fl_set_object_label(a4,buf);
  666.     sprintf(buf,"%08lx", (unsigned long int)m68k_areg(regs,5));
  667.     fl_set_object_label(a5,buf);
  668.     sprintf(buf,"%08lx", (unsigned long int)m68k_areg(regs,6));
  669.     fl_set_object_label(a6,buf);
  670.     sprintf(buf,"%08lx", (unsigned long int)m68k_areg(regs,7));
  671.     fl_set_object_label(a7,buf);
  672.     sprintf(buf,"%08lx", (unsigned long int)m68k_dreg(regs,0));
  673.     fl_set_object_label(d0,buf);
  674.     sprintf(buf,"%08lx", (unsigned long int)m68k_dreg(regs,1));
  675.     fl_set_object_label(d1,buf);
  676.     sprintf(buf,"%08lx", (unsigned long int)m68k_dreg(regs,2));
  677.     fl_set_object_label(d2,buf);
  678.     sprintf(buf,"%08lx", (unsigned long int)m68k_dreg(regs,3));
  679.     fl_set_object_label(d3,buf);
  680.     sprintf(buf,"%08lx", (unsigned long int)m68k_dreg(regs,4));
  681.     fl_set_object_label(d4,buf);
  682.     sprintf(buf,"%08lx", (unsigned long int)m68k_dreg(regs,5));
  683.     fl_set_object_label(d5,buf);
  684.     sprintf(buf,"%08lx", (unsigned long int)m68k_dreg(regs,6));
  685.     fl_set_object_label(d6,buf);
  686.     sprintf(buf,"%08lx", (unsigned long int)m68k_dreg(regs,7));
  687.     fl_set_object_label(d7,buf);
  688.  
  689.     if (regs.s == 0) regs.usp = m68k_areg(regs,7);
  690.     if (regs.s && regs.m) regs.msp = m68k_areg(regs,7);
  691.     if (regs.s && regs.m == 0) regs.isp = m68k_areg(regs,7);
  692.  
  693.     sprintf(buf,"%08lx",regs.usp);
  694.     fl_set_object_label(usp,buf);
  695.     sprintf(buf,"%08lx",regs.msp);
  696.     fl_set_object_label(msp,buf);
  697.     sprintf(buf,"%08lx",regs.isp);
  698.     fl_set_object_label(isp,buf);
  699.     sprintf(buf,"%08lx",regs.vbr);
  700.     fl_set_object_label(vbr,buf);
  701.     sprintf(buf,"%d",regs.intmask);
  702.     fl_set_object_label(imask,buf);
  703.     sprintf(buf,"%08lx", (unsigned long int)m68k_getpc());
  704.     fl_set_object_label(pc,buf);
  705.     fl_set_button(f_t,regs.t0);
  706.     fl_set_button(f_s,regs.s);
  707.     fl_set_button(f_m,regs.m);
  708.     fl_set_button(f_x,XFLG);
  709.     fl_set_button(f_n,NFLG);
  710.     fl_set_button(f_z,ZFLG);
  711.     fl_set_button(f_v,VFLG);
  712.     fl_set_button(f_c,CFLG);
  713.     sprintf(buf,"%g",regs.fp[0]);
  714.     fl_set_object_label(fpu0,buf);
  715.     sprintf(buf,"%g",regs.fp[1]);
  716.     fl_set_object_label(fpu1,buf);
  717.     sprintf(buf,"%g",regs.fp[2]);
  718.     fl_set_object_label(fpu2,buf);
  719.     sprintf(buf,"%g",regs.fp[3]);
  720.     fl_set_object_label(fpu3,buf);
  721.     sprintf(buf,"%g",regs.fp[4]);
  722.     fl_set_object_label(fpu4,buf);
  723.     sprintf(buf,"%g",regs.fp[5]);
  724.     fl_set_object_label(fpu5,buf);
  725.     sprintf(buf,"%g",regs.fp[6]);
  726.     fl_set_object_label(fpu6,buf);
  727.     sprintf(buf,"%g",regs.fp[7]);
  728.     fl_set_object_label(fpu7,buf);
  729.     fl_set_button(fpu_n,(regs.fpsr & 0x8000000) != 0);
  730.     fl_set_button(fpu_z,(regs.fpsr & 0x4000000) != 0);
  731.     fl_set_button(fpu_i,(regs.fpsr & 0x2000000) != 0);
  732.     fl_set_button(fpu_nan,(regs.fpsr & 0x1000000) != 0);
  733.  
  734.     uaectrl_disasm(m68k_getpc(),&nextpc,1,buf);
  735.  
  736.     fl_set_object_label(Output,buf);
  737.     fl_unfreeze_form(Debugger);
  738.     fl_freeze_form(Custom);
  739.     x_dumpcia();
  740.     x_dumpcustom();
  741.     fl_unfreeze_form(Custom);
  742. }
  743.  
  744. void debug(void)
  745. {
  746.     FL_OBJECT *obj;
  747.  
  748.     bogusframe = 1;
  749.  
  750.     if (do_skip && (m68k_getpc() != skipaddr/* || regs.a[0] != 0x1e558*/)) {
  751.     regs.spcflags |= SPCFLAG_BRK;
  752.     return;
  753.     }
  754.     do_skip = 0;
  755.  
  756. #ifdef NEED_TO_DEBUG_BADLY
  757.     history[lasthist] = regs;
  758.     historyf[lasthist] = regflags;
  759. #else
  760.     history[lasthist] = m68k_getpc();
  761. #endif
  762.     if (++lasthist == MAX_HIST) lasthist = 0;
  763.     if (lasthist == firsthist) {
  764.     if (++firsthist == MAX_HIST) firsthist = 0;
  765.     }
  766.     do{
  767.     uaectrl_update();
  768.     obj = fl_do_forms();
  769.     if(exit_debug == 0) { debugging = 1; exit_debug = 2; return; }
  770.     if(exit_debug == 1) { debugging = 0; exit_debug = 2; return; }
  771.     } while(1);
  772.  
  773. }
  774.  
  775.  
  776. int speed_up_counter;
  777.  
  778. static void create_form_Control(void)
  779. {
  780.   FL_OBJECT *obj;
  781.  
  782.   if (Control)
  783.      return;
  784.  
  785.   Control = fl_bgn_form(FL_NO_BOX,380,300);
  786.   obj = fl_add_box(FL_UP_BOX,0,0,380,300,"");
  787.   obj = fl_add_frame(FL_ENGRAVED_FRAME,10,20,360,270,"");
  788.   obj = fl_add_frame(FL_ENGRAVED_FRAME,20,30,330,50,"");
  789.  
  790.   udf0 = fl_bgn_group();
  791.   obj = fl_add_frame(FL_ENGRAVED_FRAME,20,100,340,180,"");
  792.   fl_end_group();
  793.  
  794.   obj = fl_add_frame(FL_DOWN_FRAME,30,240,280,30,"");
  795.   I_df3 = obj = fl_add_button(FL_NORMAL_BUTTON,260,240,50,30,"Insert");
  796.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  797.     fl_set_object_callback(obj,ctrl_insert,0);
  798.   obj = fl_add_frame(FL_DOWN_FRAME,30,120,280,30,"");
  799.   DF0 = obj = fl_add_text(FL_NORMAL_TEXT,70,120,140,30,"df0.adf");
  800.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  801.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  802.   Reset = obj = fl_add_button(FL_NORMAL_BUTTON,30,40,70,30,"Reset");
  803.     fl_set_button_shortcut(obj,"R",1);
  804.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  805.     fl_set_object_callback(obj,ctrl_reset,0);
  806.   Debug = obj = fl_add_button(FL_NORMAL_BUTTON,130,40,60,30,"Debug");
  807.     fl_set_button_shortcut(obj,"D",1);
  808.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  809.     fl_set_object_callback(obj,ctrl_debug,0);
  810.   Exit = obj = fl_add_button(FL_NORMAL_BUTTON,220,40,60,30,"Exit");
  811.     fl_set_button_shortcut(obj,"E",1);
  812.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  813.     fl_set_object_callback(obj,ctrl_exit,0);
  814.   Power = obj = fl_add_button(FL_NORMAL_BUTTON,380,60,40,20,"");
  815.     fl_set_object_boxtype(obj,FL_NO_BOX);
  816.     fl_set_object_color(obj,FL_BLACK,FL_RED);
  817.   Text_1 = obj = fl_add_text(FL_NORMAL_TEXT,140,10,100,20,"UAE - Control");
  818.     fl_set_object_lsize(obj,FL_MEDIUM_SIZE);
  819.     fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
  820.   Text_2 = obj = fl_add_text(FL_NORMAL_TEXT,140,90,110,20,"Floppy Drives");
  821.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  822.     fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
  823.   obj = fl_add_frame(FL_DOWN_FRAME,30,160,280,30,"");
  824.   obj = fl_add_frame(FL_DOWN_FRAME,30,200,280,30,"");
  825.   E_df0 = obj = fl_add_button(FL_NORMAL_BUTTON,210,120,50,30,"Eject");
  826.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  827.     fl_set_object_callback(obj,ctrl_eject,0);
  828.   I_df0 = obj = fl_add_button(FL_NORMAL_BUTTON,260,120,50,30,"Insert");
  829.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  830.     fl_set_object_callback(obj,ctrl_insert,0);
  831.   E_df1 = obj = fl_add_button(FL_NORMAL_BUTTON,210,160,50,30,"Eject");
  832.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  833.     fl_set_object_callback(obj,ctrl_eject,0);
  834.   I_df1 = obj = fl_add_button(FL_NORMAL_BUTTON,260,160,50,30,"Insert");
  835.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  836.     fl_set_object_callback(obj,ctrl_insert,0);
  837.   E_df2 = obj = fl_add_button(FL_NORMAL_BUTTON,210,200,50,30,"Eject");
  838.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  839.     fl_set_object_callback(obj,ctrl_eject,0);
  840.   I_df2 = obj = fl_add_button(FL_NORMAL_BUTTON,260,200,50,30,"Insert");
  841.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  842.     fl_set_object_callback(obj,ctrl_insert,0);
  843.   E_df3 = obj = fl_add_button(FL_NORMAL_BUTTON,210,240,50,30,"Eject");
  844.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  845.     fl_set_object_callback(obj,ctrl_eject,0);
  846.   Led_0 = obj = fl_add_button(FL_NORMAL_BUTTON,390,140,30,40,"");
  847.     fl_set_object_boxtype(obj,FL_NO_BOX);
  848.     fl_set_object_color(obj,FL_COL1,FL_GREEN);
  849.   obj = fl_add_text(FL_NORMAL_TEXT,30,120,40,30,"DF0 :");
  850.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  851.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  852.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  853.   obj = fl_add_text(FL_NORMAL_TEXT,30,160,40,30,"DF1 :");
  854.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  855.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  856.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  857.   obj = fl_add_text(FL_NORMAL_TEXT,30,200,40,30,"DF2 :");
  858.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  859.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  860.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  861.   obj = fl_add_text(FL_NORMAL_TEXT,30,240,40,30,"DF3 :");
  862.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  863.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  864.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  865.   DF1 = obj = fl_add_text(FL_NORMAL_TEXT,70,160,140,30,"df1.adf");
  866.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  867.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  868.   DF2 = obj = fl_add_text(FL_NORMAL_TEXT,70,200,140,30,"df2.adf");
  869.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  870.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  871.   DF3 = obj = fl_add_text(FL_NORMAL_TEXT,70,240,140,30,"df3.adf");
  872.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  873.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  874.   l_power = obj = fl_add_text(FL_NORMAL_TEXT,300,50,30,10,"");
  875.     fl_set_object_boxtype(obj,FL_FRAME_BOX);
  876.     fl_set_object_color(obj,FL_BLACK,FL_MCOL);
  877.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  878.   l_df0 = obj = fl_add_text(FL_NORMAL_TEXT,320,130,30,10,"");
  879.     fl_set_object_boxtype(obj,FL_FRAME_BOX);
  880.     fl_set_object_color(obj,FL_BLACK,FL_GREEN);
  881.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  882.   l_df1 = obj = fl_add_text(FL_NORMAL_TEXT,320,170,30,10,"");
  883.     fl_set_object_boxtype(obj,FL_FRAME_BOX);
  884.     fl_set_object_color(obj,FL_BLACK,FL_GREEN);
  885.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  886.   l_df2 = obj = fl_add_text(FL_NORMAL_TEXT,320,210,30,10,"");
  887.     fl_set_object_boxtype(obj,FL_FRAME_BOX);
  888.     fl_set_object_color(obj,FL_BLACK,FL_GREEN);
  889.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  890.   l_df3 = obj = fl_add_text(FL_NORMAL_TEXT,320,250,30,10,"");
  891.     fl_set_object_boxtype(obj,FL_FRAME_BOX);
  892.     fl_set_object_color(obj,FL_BLACK,FL_GREEN);
  893.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  894.   fl_end_form();
  895.  
  896. }
  897. /*---------------------------------------*/
  898.  
  899. static void create_form_Debugger(void)
  900. {
  901.   FL_OBJECT *obj;
  902.  
  903.   if (Debugger)
  904.      return;
  905.  
  906.   Debugger = fl_bgn_form(FL_NO_BOX,460,540);
  907.   obj = fl_add_box(FL_UP_BOX,0,0,460,540,"");
  908.   obj = fl_add_frame(FL_ENGRAVED_FRAME,40,330,380,30,"");
  909.   obj = fl_add_frame(FL_ENGRAVED_FRAME,10,10,440,520,"");
  910.   obj = fl_add_frame(FL_ENGRAVED_FRAME,20,40,420,370,"");
  911.   obj = fl_add_frame(FL_ENGRAVED_FRAME,20,420,420,50,"");
  912.   obj = fl_add_frame(FL_ENGRAVED_FRAME,20,470,420,50,"");
  913.   obj = fl_add_text(FL_NORMAL_TEXT,150,0,130,30,"UAE - Debugger");
  914.     fl_set_object_lsize(obj,FL_MEDIUM_SIZE);
  915.     fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
  916.   obj = fl_add_text(FL_NORMAL_TEXT,140,30,160,30,"Prozessor Registers");
  917.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  918.     fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
  919.   obj = fl_add_text(FL_NORMAL_TEXT,30,70,40,30,"A0 :");
  920.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  921.     fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
  922.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  923.   obj = fl_add_text(FL_NORMAL_TEXT,30,100,40,30,"A1 :");
  924.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  925.     fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
  926.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  927.   obj = fl_add_text(FL_NORMAL_TEXT,30,130,40,30,"A2 :");
  928.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  929.     fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
  930.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  931.   obj = fl_add_text(FL_NORMAL_TEXT,30,160,40,30,"A3 :");
  932.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  933.     fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
  934.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  935.   obj = fl_add_text(FL_NORMAL_TEXT,30,190,40,30,"A4 :");
  936.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  937.     fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
  938.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  939.   obj = fl_add_text(FL_NORMAL_TEXT,30,220,40,30,"A5 :");
  940.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  941.     fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
  942.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  943.   obj = fl_add_text(FL_NORMAL_TEXT,30,250,40,30,"A6 :");
  944.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  945.     fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
  946.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  947.   obj = fl_add_text(FL_NORMAL_TEXT,30,280,40,30,"A7 :");
  948.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  949.     fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
  950.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  951.   obj = fl_add_text(FL_NORMAL_TEXT,160,70,40,30,"D0 :");
  952.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  953.     fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
  954.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  955.   obj = fl_add_text(FL_NORMAL_TEXT,160,100,40,30,"D1 :");
  956.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  957.     fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
  958.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  959.   obj = fl_add_text(FL_NORMAL_TEXT,160,130,40,30,"D2 :");
  960.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  961.     fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
  962.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  963.   obj = fl_add_text(FL_NORMAL_TEXT,160,160,40,30,"D3 :");
  964.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  965.     fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
  966.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  967.   obj = fl_add_text(FL_NORMAL_TEXT,160,190,40,30,"D4 :");
  968.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  969.     fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
  970.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  971.   obj = fl_add_text(FL_NORMAL_TEXT,160,220,40,30,"D5 :");
  972.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  973.     fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
  974.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  975.   obj = fl_add_text(FL_NORMAL_TEXT,160,250,40,30,"D6 :");
  976.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  977.     fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
  978.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  979.   obj = fl_add_text(FL_NORMAL_TEXT,160,280,40,30,"D7 :");
  980.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  981.     fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
  982.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  983.   a0 = obj = fl_add_text(FL_NORMAL_TEXT,70,70,80,30,"");
  984.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  985.     fl_set_object_color(obj,FL_TOP_BCOL,FL_MCOL);
  986.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  987.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  988.   a1 = obj = fl_add_text(FL_NORMAL_TEXT,70,100,80,30,"");
  989.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  990.     fl_set_object_color(obj,FL_TOP_BCOL,FL_MCOL);
  991.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  992.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  993.   a2 = obj = fl_add_text(FL_NORMAL_TEXT,70,130,80,30,"");
  994.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  995.     fl_set_object_color(obj,FL_TOP_BCOL,FL_MCOL);
  996.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  997.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  998.   a3 = obj = fl_add_text(FL_NORMAL_TEXT,70,160,80,30,"");
  999.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1000.     fl_set_object_color(obj,FL_TOP_BCOL,FL_MCOL);
  1001.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1002.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1003.   a4 = obj = fl_add_text(FL_NORMAL_TEXT,70,190,80,30,"");
  1004.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1005.     fl_set_object_color(obj,FL_TOP_BCOL,FL_MCOL);
  1006.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1007.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1008.   a5 = obj = fl_add_text(FL_NORMAL_TEXT,70,220,80,30,"");
  1009.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1010.     fl_set_object_color(obj,FL_TOP_BCOL,FL_MCOL);
  1011.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1012.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1013.   a6 = obj = fl_add_text(FL_NORMAL_TEXT,70,250,80,30,"");
  1014.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1015.     fl_set_object_color(obj,FL_TOP_BCOL,FL_MCOL);
  1016.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1017.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1018.   a7 = obj = fl_add_text(FL_NORMAL_TEXT,70,280,80,30,"");
  1019.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1020.     fl_set_object_color(obj,FL_TOP_BCOL,FL_MCOL);
  1021.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1022.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1023.   d0 = obj = fl_add_text(FL_NORMAL_TEXT,200,70,70,30,"");
  1024.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1025.     fl_set_object_color(obj,FL_TOP_BCOL,FL_MCOL);
  1026.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1027.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1028.   d1 = obj = fl_add_text(FL_NORMAL_TEXT,200,100,70,30,"");
  1029.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1030.     fl_set_object_color(obj,FL_TOP_BCOL,FL_MCOL);
  1031.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1032.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1033.   d2 = obj = fl_add_text(FL_NORMAL_TEXT,200,130,70,30,"");
  1034.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1035.     fl_set_object_color(obj,FL_TOP_BCOL,FL_MCOL);
  1036.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1037.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1038.   d3 = obj = fl_add_text(FL_NORMAL_TEXT,200,160,70,30,"");
  1039.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1040.     fl_set_object_color(obj,FL_TOP_BCOL,FL_MCOL);
  1041.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1042.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1043.   d4 = obj = fl_add_text(FL_NORMAL_TEXT,200,190,70,30,"");
  1044.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1045.     fl_set_object_color(obj,FL_TOP_BCOL,FL_MCOL);
  1046.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1047.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1048.   d5 = obj = fl_add_text(FL_NORMAL_TEXT,200,220,70,30,"");
  1049.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1050.     fl_set_object_color(obj,FL_TOP_BCOL,FL_MCOL);
  1051.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1052.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1053.   d6 = obj = fl_add_text(FL_NORMAL_TEXT,200,250,70,30,"");
  1054.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1055.     fl_set_object_color(obj,FL_TOP_BCOL,FL_MCOL);
  1056.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1057.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1058.   d7 = obj = fl_add_text(FL_NORMAL_TEXT,200,280,70,30,"");
  1059.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1060.     fl_set_object_color(obj,FL_TOP_BCOL,FL_MCOL);
  1061.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1062.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1063.   obj = fl_add_text(FL_NORMAL_TEXT,280,70,40,30,"USP");
  1064.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1065.     fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
  1066.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  1067.   usp = obj = fl_add_text(FL_NORMAL_TEXT,330,70,80,30,"");
  1068.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1069.     fl_set_object_color(obj,FL_TOP_BCOL,FL_MCOL);
  1070.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1071.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1072.   obj = fl_add_text(FL_NORMAL_TEXT,280,100,40,30,"ISP");
  1073.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1074.     fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
  1075.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  1076.   obj = fl_add_text(FL_NORMAL_TEXT,280,130,40,30,"MSP");
  1077.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1078.     fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
  1079.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  1080.   obj = fl_add_text(FL_NORMAL_TEXT,280,160,40,30,"VBR");
  1081.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1082.     fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
  1083.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  1084.   isp = obj = fl_add_text(FL_NORMAL_TEXT,330,100,80,30,"");
  1085.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1086.     fl_set_object_color(obj,FL_TOP_BCOL,FL_MCOL);
  1087.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1088.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1089.   msp = obj = fl_add_text(FL_NORMAL_TEXT,330,130,80,30,"");
  1090.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1091.     fl_set_object_color(obj,FL_TOP_BCOL,FL_MCOL);
  1092.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1093.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1094.   vbr = obj = fl_add_text(FL_NORMAL_TEXT,330,160,80,30,"");
  1095.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1096.     fl_set_object_color(obj,FL_TOP_BCOL,FL_MCOL);
  1097.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1098.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1099.   pc = obj = fl_add_text(FL_NORMAL_TEXT,330,220,80,30,"");
  1100.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1101.     fl_set_object_color(obj,FL_TOP_BCOL,FL_MCOL);
  1102.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1103.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1104.   obj = fl_add_text(FL_NORMAL_TEXT,280,220,40,30,"PC");
  1105.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1106.     fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
  1107.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  1108.   obj = fl_add_button(FL_NORMAL_BUTTON,30,480,70,30,"Custom");
  1109.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1110.     fl_set_object_callback(obj,ctrl_custom,0);
  1111.   obj = fl_add_button(FL_NORMAL_BUTTON,110,480,70,30,"FPU");
  1112.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1113.     fl_set_object_callback(obj,ctrl_fpu,0);
  1114.   obj = fl_add_button(FL_NORMAL_BUTTON,190,480,70,30,"Memory");
  1115.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1116.     fl_set_object_callback(obj,ctrl_mem,0);
  1117.   obj = fl_add_button(FL_NORMAL_BUTTON,270,480,90,30,"Disassembler");
  1118.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1119.     fl_set_object_callback(obj,ctrl_disasm,0);
  1120.   obj = fl_add_button(FL_NORMAL_BUTTON,370,480,60,30,"Exit");
  1121.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1122.     fl_set_object_callback(obj,ctrl_debug_exit,0);
  1123.   obj = fl_add_button(FL_NORMAL_BUTTON,30,430,70,30,"Step");
  1124.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1125.     fl_set_object_callback(obj,ctrl_step,0);
  1126.   obj = fl_add_button(FL_NORMAL_BUTTON,110,430,70,30,"Next");
  1127.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1128.     fl_set_object_callback(obj,ctrl_next,0);
  1129.   obj = fl_add_button(FL_NORMAL_BUTTON,190,430,70,30,"Go");
  1130.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1131.     fl_set_object_callback(obj,ctrl_go,0);
  1132.   obj = fl_add_button(FL_NORMAL_BUTTON,270,430,70,30,"Forward");
  1133.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1134.     fl_set_object_callback(obj,ctrl_forward,0);
  1135.   adress = obj = fl_add_input(FL_NORMAL_INPUT,350,430,80,30,"");
  1136.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1137.     fl_set_object_callback(obj,ctrl_address,0);
  1138.   imask = obj = fl_add_text(FL_NORMAL_TEXT,330,250,80,30,"");
  1139.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1140.     fl_set_object_color(obj,FL_TOP_BCOL,FL_MCOL);
  1141.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1142.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1143.   obj = fl_add_text(FL_NORMAL_TEXT,280,250,40,30,"IMask");
  1144.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1145.     fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
  1146.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  1147.   Output = obj = fl_add_text(FL_NORMAL_TEXT,30,370,400,30,"");
  1148.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1149.     fl_set_object_color(obj,FL_TOP_BCOL,FL_MCOL);
  1150.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1151.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1152.   obj = fl_add_text(FL_NORMAL_TEXT,40,330,40,30,"Flags");
  1153.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1154.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1155.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  1156.   f_s = obj = fl_add_checkbutton(FL_PUSH_BUTTON,90,330,40,30,"S");
  1157.   f_m = obj = fl_add_checkbutton(FL_PUSH_BUTTON,130,330,40,30,"M");
  1158.   f_x = obj = fl_add_checkbutton(FL_PUSH_BUTTON,170,330,40,30,"X");
  1159.   f_n = obj = fl_add_checkbutton(FL_PUSH_BUTTON,210,330,40,30,"N");
  1160.   f_z = obj = fl_add_checkbutton(FL_PUSH_BUTTON,250,330,40,30,"Z");
  1161.   f_v = obj = fl_add_checkbutton(FL_PUSH_BUTTON,290,330,40,30,"V");
  1162.   f_c = obj = fl_add_checkbutton(FL_PUSH_BUTTON,330,330,40,30,"C");
  1163.   f_t = obj = fl_add_checkbutton(FL_PUSH_BUTTON,370,330,40,30,"T");
  1164.   fl_end_form();
  1165.  
  1166. }
  1167. /*---------------------------------------*/
  1168.  
  1169. static void create_form_Custom(void)
  1170. {
  1171.   FL_OBJECT *obj;
  1172.  
  1173.   if (Custom)
  1174.      return;
  1175.  
  1176.   Custom = fl_bgn_form(FL_NO_BOX,340,290);
  1177.   obj = fl_add_box(FL_UP_BOX,0,0,340,290,"");
  1178.   obj = fl_add_frame(FL_ENGRAVED_FRAME,10,10,320,270,"");
  1179.   obj = fl_add_text(FL_NORMAL_TEXT,100,0,130,20,"Custom Chips");
  1180.     fl_set_object_lsize(obj,FL_MEDIUM_SIZE);
  1181.     fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
  1182.   obj = fl_add_text(FL_NORMAL_TEXT,20,50,50,20,"CRA");
  1183.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1184.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1185.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  1186.   obj = fl_add_text(FL_NORMAL_TEXT,20,70,50,20,"CRB");
  1187.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1188.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1189.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  1190.   obj = fl_add_text(FL_NORMAL_TEXT,20,90,50,20,"IMask");
  1191.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1192.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1193.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  1194.   obj = fl_add_text(FL_NORMAL_TEXT,20,110,50,20,"TOD");
  1195.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1196.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1197.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  1198.   obj = fl_add_text(FL_NORMAL_TEXT,20,130,50,20,"TA");
  1199.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1200.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1201.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  1202.   obj = fl_add_text(FL_NORMAL_TEXT,20,150,50,20,"TB");
  1203.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1204.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1205.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  1206.   obj = fl_add_frame(FL_ENGRAVED_FRAME,70,30,110,160,"");
  1207.   obj = fl_add_frame(FL_ENGRAVED_FRAME,190,30,110,160,"");
  1208.   obj = fl_add_text(FL_NORMAL_TEXT,110,20,30,20,"A");
  1209.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1210.     fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
  1211.   obj = fl_add_text(FL_NORMAL_TEXT,230,20,30,20,"B");
  1212.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1213.     fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
  1214.   a_cra = obj = fl_add_text(FL_NORMAL_TEXT,80,50,90,20,"");
  1215.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1216.     fl_set_object_color(obj,FL_MCOL,FL_MCOL);
  1217.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1218.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1219.   a_crb = obj = fl_add_text(FL_NORMAL_TEXT,80,70,90,20,"");
  1220.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1221.     fl_set_object_color(obj,FL_MCOL,FL_MCOL);
  1222.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1223.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1224.   a_imask = obj = fl_add_text(FL_NORMAL_TEXT,80,90,90,20,"");
  1225.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1226.     fl_set_object_color(obj,FL_MCOL,FL_MCOL);
  1227.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1228.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1229.   a_tod = obj = fl_add_text(FL_NORMAL_TEXT,80,110,90,20,"");
  1230.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1231.     fl_set_object_color(obj,FL_MCOL,FL_MCOL);
  1232.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1233.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1234.   a_ta = obj = fl_add_text(FL_NORMAL_TEXT,80,130,90,20,"");
  1235.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1236.     fl_set_object_color(obj,FL_MCOL,FL_MCOL);
  1237.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1238.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1239.   a_tb = obj = fl_add_text(FL_NORMAL_TEXT,80,150,90,20,"");
  1240.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1241.     fl_set_object_color(obj,FL_MCOL,FL_MCOL);
  1242.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1243.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1244.   b_cra = obj = fl_add_text(FL_NORMAL_TEXT,200,50,90,20,"");
  1245.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1246.     fl_set_object_color(obj,FL_MCOL,FL_MCOL);
  1247.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1248.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1249.   b_crb = obj = fl_add_text(FL_NORMAL_TEXT,200,70,90,20,"");
  1250.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1251.     fl_set_object_color(obj,FL_MCOL,FL_MCOL);
  1252.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1253.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1254.   b_imask = obj = fl_add_text(FL_NORMAL_TEXT,200,90,90,20,"");
  1255.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1256.     fl_set_object_color(obj,FL_MCOL,FL_MCOL);
  1257.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1258.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1259.   b_tod = obj = fl_add_text(FL_NORMAL_TEXT,200,110,90,20,"");
  1260.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1261.     fl_set_object_color(obj,FL_MCOL,FL_MCOL);
  1262.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1263.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1264.   b_ta = obj = fl_add_text(FL_NORMAL_TEXT,200,130,90,20,"");
  1265.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1266.     fl_set_object_color(obj,FL_MCOL,FL_MCOL);
  1267.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1268.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1269.   b_tb = obj = fl_add_text(FL_NORMAL_TEXT,200,150,90,20,"");
  1270.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1271.     fl_set_object_color(obj,FL_MCOL,FL_MCOL);
  1272.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1273.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1274.   uae_dmacon = obj = fl_add_text(FL_NORMAL_TEXT,90,210,90,20,"");
  1275.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1276.     fl_set_object_color(obj,FL_MCOL,FL_MCOL);
  1277.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1278.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1279.   obj = fl_add_text(FL_NORMAL_TEXT,20,210,70,20,"DMACON");
  1280.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1281.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1282.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  1283.   obj = fl_add_text(FL_NORMAL_TEXT,20,230,70,20,"INTENA");
  1284.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1285.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1286.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  1287.   obj = fl_add_text(FL_NORMAL_TEXT,20,250,70,20,"INTREQ");
  1288.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1289.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1290.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  1291.   uae_intena = obj = fl_add_text(FL_NORMAL_TEXT,90,230,90,20,"");
  1292.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1293.     fl_set_object_color(obj,FL_MCOL,FL_MCOL);
  1294.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1295.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1296.   uae_intreq = obj = fl_add_text(FL_NORMAL_TEXT,90,250,90,20,"");
  1297.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1298.     fl_set_object_color(obj,FL_MCOL,FL_MCOL);
  1299.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1300.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1301.   obj = fl_add_text(FL_NORMAL_TEXT,190,210,50,20,"VPOS");
  1302.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1303.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1304.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  1305.   uae_vpos = obj = fl_add_text(FL_NORMAL_TEXT,250,210,50,20,"");
  1306.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1307.     fl_set_object_color(obj,FL_MCOL,FL_MCOL);
  1308.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1309.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1310.   obj = fl_add_text(FL_NORMAL_TEXT,190,230,50,20,"HPOS");
  1311.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1312.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1313.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  1314.   uae_hpos = obj = fl_add_text(FL_NORMAL_TEXT,250,230,50,20,"");
  1315.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1316.     fl_set_object_color(obj,FL_MCOL,FL_MCOL);
  1317.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1318.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1319.   obj = fl_add_text(FL_NORMAL_TEXT,190,250,60,20,"Frames");
  1320.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1321.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1322.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  1323.   uae_frames = obj = fl_add_text(FL_NORMAL_TEXT,250,250,50,20,"");
  1324.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1325.     fl_set_object_color(obj,FL_MCOL,FL_MCOL);
  1326.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1327.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1328.   fl_end_form();
  1329.  
  1330. }
  1331. /*---------------------------------------*/
  1332.  
  1333. static void create_form_FPU(void)
  1334. {
  1335.   FL_OBJECT *obj;
  1336.  
  1337.   if (FPU)
  1338.      return;
  1339.  
  1340.   FPU = fl_bgn_form(FL_NO_BOX,300,160);
  1341.   obj = fl_add_box(FL_UP_BOX,0,0,300,160,"");
  1342.   obj = fl_add_frame(FL_ENGRAVED_FRAME,10,10,280,140,"");
  1343.   obj = fl_add_text(FL_NORMAL_TEXT,130,0,40,20,"FPU");
  1344.     fl_set_object_lsize(obj,FL_MEDIUM_SIZE);
  1345.     fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
  1346.   obj = fl_add_text(FL_NORMAL_TEXT,20,30,50,20,"FP0");
  1347.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1348.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1349.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  1350.   obj = fl_add_text(FL_NORMAL_TEXT,20,50,50,20,"FP1");
  1351.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1352.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1353.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  1354.   obj = fl_add_text(FL_NORMAL_TEXT,20,70,50,20,"FP2");
  1355.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1356.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1357.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  1358.   obj = fl_add_text(FL_NORMAL_TEXT,150,30,50,20,"FP4");
  1359.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1360.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1361.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  1362.   obj = fl_add_text(FL_NORMAL_TEXT,150,50,50,20,"FP5");
  1363.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1364.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1365.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  1366.   obj = fl_add_text(FL_NORMAL_TEXT,150,70,50,20,"FP6");
  1367.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1368.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1369.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  1370.   obj = fl_add_text(FL_NORMAL_TEXT,20,90,50,20,"FP3");
  1371.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1372.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1373.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  1374.   obj = fl_add_text(FL_NORMAL_TEXT,150,90,50,20,"FP7");
  1375.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1376.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1377.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  1378.   fpu0 = obj = fl_add_text(FL_NORMAL_TEXT,60,30,80,20,"");
  1379.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1380.     fl_set_object_color(obj,FL_MCOL,FL_MCOL);
  1381.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1382.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1383.   fpu1 = obj = fl_add_text(FL_NORMAL_TEXT,60,50,80,20,"");
  1384.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1385.     fl_set_object_color(obj,FL_MCOL,FL_MCOL);
  1386.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1387.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1388.   fpu2 = obj = fl_add_text(FL_NORMAL_TEXT,60,70,80,20,"");
  1389.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1390.     fl_set_object_color(obj,FL_MCOL,FL_MCOL);
  1391.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1392.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1393.   fpu3 = obj = fl_add_text(FL_NORMAL_TEXT,60,90,80,20,"");
  1394.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1395.     fl_set_object_color(obj,FL_MCOL,FL_MCOL);
  1396.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1397.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1398.   fpu4 = obj = fl_add_text(FL_NORMAL_TEXT,190,30,80,20,"");
  1399.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1400.     fl_set_object_color(obj,FL_MCOL,FL_MCOL);
  1401.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1402.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1403.   fpu5 = obj = fl_add_text(FL_NORMAL_TEXT,190,50,80,20,"");
  1404.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1405.     fl_set_object_color(obj,FL_MCOL,FL_MCOL);
  1406.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1407.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1408.   fpu6 = obj = fl_add_text(FL_NORMAL_TEXT,190,70,80,20,"");
  1409.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1410.     fl_set_object_color(obj,FL_MCOL,FL_MCOL);
  1411.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1412.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1413.   fpu7 = obj = fl_add_text(FL_NORMAL_TEXT,190,90,80,20,"");
  1414.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1415.     fl_set_object_color(obj,FL_MCOL,FL_MCOL);
  1416.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1417.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1418.   fpu_n = obj = fl_add_checkbutton(FL_PUSH_BUTTON,30,120,40,30,"N");
  1419.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1420.   fpu_z = obj = fl_add_checkbutton(FL_PUSH_BUTTON,90,120,40,30,"Z");
  1421.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1422.   fpu_i = obj = fl_add_checkbutton(FL_PUSH_BUTTON,150,120,40,30,"I");
  1423.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1424.   fpu_nan = obj = fl_add_checkbutton(FL_PUSH_BUTTON,210,120,60,30,"NAN");
  1425.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1426.   fl_end_form();
  1427.  
  1428. }
  1429. /*---------------------------------------*/
  1430.  
  1431. static void create_form_Memory(void)
  1432. {
  1433.   FL_OBJECT *obj;
  1434.  
  1435.   if (Memory)
  1436.      return;
  1437.  
  1438.   Memory = fl_bgn_form(FL_NO_BOX,440,380);
  1439.   obj = fl_add_box(FL_UP_BOX,0,0,440,380,"");
  1440.   obj = fl_add_frame(FL_ENGRAVED_FRAME,10,10,420,360,"");
  1441.   uaectrl_down = obj = fl_add_button(FL_TOUCH_BUTTON,20,330,30,30,"@2");
  1442.     fl_set_object_callback(obj,change_memory_start,0);
  1443.   memory_field = obj = fl_add_text(FL_NORMAL_TEXT,20,30,400,290,"");
  1444.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1445.     fl_set_object_lsize(obj,FL_MEDIUM_SIZE);
  1446.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1447.     fl_set_object_lstyle(obj,FL_FIXED_STYLE);
  1448.   obj = fl_add_text(FL_NORMAL_TEXT,140,0,140,20,"Memory Browser");
  1449.     fl_set_object_lsize(obj,FL_MEDIUM_SIZE);
  1450.     fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
  1451.   uaectrl_up = obj = fl_add_button(FL_TOUCH_BUTTON,390,330,30,30,"@8");
  1452.     fl_set_object_callback(obj,change_memory_start,0);
  1453.   memory_start = obj = fl_add_input(FL_NORMAL_INPUT,150,330,180,30,"");
  1454.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1455.     fl_set_object_lstyle(obj,FL_FIXED_STYLE);
  1456.     fl_set_object_callback(obj,change_memory_start,0);
  1457.   obj = fl_add_text(FL_NORMAL_TEXT,90,330,50,30,"Start :");
  1458.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1459.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1460.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  1461.   fl_end_form();
  1462.  
  1463. }
  1464. /*---------------------------------------*/
  1465.  
  1466. static void create_form_Disasm(void)
  1467. {
  1468.   FL_OBJECT *obj;
  1469.  
  1470.   if (Disasm)
  1471.      return;
  1472.  
  1473.   Disasm = fl_bgn_form(FL_NO_BOX,530,370);
  1474.   obj = fl_add_box(FL_UP_BOX,0,0,530,370,"");
  1475.   obj = fl_add_frame(FL_ENGRAVED_FRAME,10,10,510,350,"");
  1476.   obj = fl_add_text(FL_NORMAL_TEXT,160,0,120,20,"Disassembler");
  1477.     fl_set_object_lsize(obj,FL_MEDIUM_SIZE);
  1478.     fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
  1479.   disasm_field = obj = fl_add_text(FL_NORMAL_TEXT,20,20,490,290,"");
  1480.     fl_set_object_boxtype(obj,FL_DOWN_BOX);
  1481.     fl_set_object_lsize(obj,FL_MEDIUM_SIZE);
  1482.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1483.     fl_set_object_lstyle(obj,FL_FIXED_STYLE);
  1484.   disasm_start = obj = fl_add_input(FL_NORMAL_INPUT,170,320,190,30,"");
  1485.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1486.     fl_set_object_lstyle(obj,FL_FIXED_STYLE);
  1487.     fl_set_object_callback(obj,change_disasm_start,0);
  1488.   obj = fl_add_text(FL_NORMAL_TEXT,110,320,50,30,"Start :");
  1489.     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
  1490.     fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  1491.     fl_set_object_lstyle(obj,FL_BOLD_STYLE);
  1492.   disasm_down = obj = fl_add_button(FL_NORMAL_BUTTON,20,320,30,30,"@2");
  1493.     fl_set_object_callback(obj,change_disasm_start,0);
  1494.   disasm_up = obj = fl_add_button(FL_NORMAL_BUTTON,470,320,30,30,"@8");
  1495.     fl_set_object_callback(obj,change_disasm_start,0);
  1496.   fl_end_form();
  1497.  
  1498. }
  1499. /*---------------------------------------*/
  1500.  
  1501. static void create_the_forms(void)
  1502. {
  1503.   create_form_Control();
  1504.   create_form_Debugger();
  1505.   create_form_Custom();
  1506.   create_form_FPU();
  1507.   create_form_Memory();
  1508.   create_form_Disasm();
  1509. }
  1510.  
  1511. /* end of forms stuff */
  1512.  
  1513. void gui_changesettings(void)
  1514. {
  1515.  
  1516. }
  1517.  
  1518. int gui_init(void)
  1519. {
  1520.     int argc=1;
  1521.     char *argv[] = { "uae", "" };
  1522.     speed_up_counter = 10;
  1523.     fl_initialize(&argc, argv, 0, 0, 0);
  1524.     exit_debug=0;
  1525.     create_the_forms();
  1526.  
  1527.     /* fill-in form initialization code */
  1528.  
  1529.     /* show the first form */
  1530.     fl_show_form(Control,FL_PLACE_CENTER,FL_FULLBORDER,"Control");
  1531.     fl_set_object_label(DF0, currprefs.df[0]);
  1532.     fl_set_object_label(DF1, currprefs.df[1]);
  1533.     fl_set_object_label(DF2, currprefs.df[2]);
  1534.     fl_set_object_label(DF3, currprefs.df[3]);
  1535.     return 1;
  1536. }
  1537.  
  1538. int gui_update(void)
  1539. {
  1540.     fl_set_object_label(DF0,currprefs.df[0]);
  1541.     fl_set_object_label(DF1,currprefs.df[1]);
  1542.     fl_set_object_label(DF2,currprefs.df[2]);
  1543.     fl_set_object_label(DF3,currprefs.df[3]);
  1544.     fl_redraw_object(DF0);
  1545.     fl_redraw_object(DF1);
  1546.     fl_redraw_object(DF2);
  1547.     fl_redraw_object(DF3);
  1548.     return 0;
  1549. }
  1550.  
  1551. void gui_exit(void)
  1552. {
  1553. }
  1554.  
  1555. void gui_led(int led, int on)
  1556. {
  1557.     if(on!=0){
  1558.     switch(led){
  1559.      case 0 : fl_set_object_color(l_power,FL_RED,FL_BLACK); break;
  1560.      case 1 : fl_set_object_color(l_df0,FL_GREEN,FL_BLACK); break;
  1561.      case 2 : fl_set_object_color(l_df1,FL_GREEN,FL_BLACK); break;
  1562.      case 3 : fl_set_object_color(l_df2,FL_GREEN,FL_BLACK); break;
  1563.      case 4 : fl_set_object_color(l_df3,FL_GREEN,FL_BLACK); break;
  1564.      default: break;
  1565.     }
  1566.     } else {
  1567.     switch(led){
  1568.      case 0: fl_set_object_color(l_power,FL_BLACK,FL_BLACK); break;
  1569.      case 1: fl_set_object_color(l_df0,FL_BLACK,FL_BLACK); break;
  1570.      case 2: fl_set_object_color(l_df1,FL_BLACK,FL_BLACK); break;
  1571.      case 3: fl_set_object_color(l_df2,FL_BLACK,FL_BLACK); break;
  1572.      case 4: fl_set_object_color(l_df3,FL_BLACK,FL_BLACK); break;
  1573.      default: break;
  1574.     }
  1575.     }
  1576. }
  1577.  
  1578. void gui_filename(int num, const char *name)
  1579. {
  1580.     gui_update ();
  1581. }
  1582.  
  1583. void gui_handle_events(void)
  1584. {
  1585.     if (--speed_up_counter == 0) {
  1586.     fl_check_forms();
  1587.     speed_up_counter = 20;
  1588.     }
  1589. }
  1590.